题目描述
S和T是两个字符串(它们只由小写字母构成),定义S与T相似当且仅当:
1、S和T长度相同。
2、对于任意两个位置i和j,如果Si和Sj相同,那么Ti和Tj相同;如果Si和Sj不同,那么Ti和Tj不同。(Si的含义为字符串S在第i个位置的字符,Ti的含义为字符串T在第i个位置的字符)
与字符串”abca”相似的串有”abca”,”cdac”,”zetz”等,现在给出一个字符串S,输出与之相似的字典序最小的串。
输入
输入只有一行,一个字符串,长度不超过100000,只由小写字母组成。
样例输入
helloworld
输出
输出一行,与之相似的字典序最小的串(只由小写字母组成的串)。
样例输出
abccdedfcg
data = input()
dict = {}
step = 97
res = ''
for i in data:
if i not in dict.keys():
dict[i] = chr(step)
res += chr(step)
step += 1
else:
res += dict[i]
print(res)
题目描述
大部分论坛、网站等,为了方便管理,都进行了关于敏感词的设定。
在多数网站,敏感词一般是指带有敏感政治倾向、暴力倾向、不健康色彩的词或不文明语,也有一些网站根据自身实际情况,设定一些只适用于本网站的特殊敏感词。比如,当你发贴的时候带有某些事先设定的词时,这个贴是不能发出的。或者这个词被自动替换为星号 (*),或者说是被和谐掉了。请注意敏感词只有小写字母,文本如果中的大写字母当做小写字母处理,出现敏感单词,即使作为子串出现也要被和谐,多个子串重叠他们都要被和谐。
例如当敏感词是gre,eat 是
Your English is Great.
将被和谐成
Your English is *.
请编程,输入给定的文本和关键字,将所有被和谐的部分都打上星号 (*)
输入
输入的第一行包含一个整数 n,表示敏感词的总数。
接下来的 n 行,每行包含一个长度不超过 100 的敏感词,单词不区分大小写。
接下来的一行包含一段长度不超过 10000的字符串表示待处理的文本。
样例输入
4
revolution
greatwall
democracy
science
Cross the greatwall, we can reach every corner of the world.
输出
输出一行,表示和谐过后的文本。
样例输出
Cross the *, we can reach every corner of the world.
while True:
num = int(input())
dis = []
for i in range(num):
dis.append(input())
sentence = input()
new_sen = []
for word in dis:
new_sen.append(sentence.lower().replace(word,len(word)*'*'))
for n in new_sen:
for t in range(len(n)):
if n[t] == '*':
sentence = sentence[:t] + '*' + sentence[t+1:]
print(sentence)
题目描述
一队士兵在操场上排成一列,士兵总数为n,士兵按照队伍从前往后的顺序从1到n依次编号。每个士兵有各自的身高,第i个士兵的身高为ai。
士兵列队完毕后,将军走到队列的最前面。因为身高不一,有些士兵可能被前面身高更高的挡住了,这样将军就看不到他们。将军能看到某个士兵当且仅当他的身高严格大于他前面的所有士兵。
问将军一共能看到多少个士兵。
输入
第一行输入一个整数T(T<=100),表示测试数据的组数。每组数据第一行输入一个数n(1=<n<=10000)表示士兵的个数,第二行n个整数a1,a2,...,an(0=<ai<=1000000000),依次表示每一个士兵的身高。
样例输入
3
4
1 2 3 4
3
1 1 1
4
1 1 3 2
输出
对于每组数据,输出一行,将军能看到的士兵数。
样例输出
4
1
2
while True:
group = int(input())
for i in range(group):
sum,max = 0,-1
num = int(input())
height = input().split()
for m in range(num):
if int(height[m]) > max:
max = int(height[m])
sum += 1
else:
sum,max = sum,max
print(sum)
分数序列和(百度2017秋招真题)
有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。
输入
测试数据有多组,其第一行为一个正整数k(0<k<=90),表示测试数据的组数。每组测试数据为一行,为单个正整数n(0<n<=90)。
样例输入
1
2
输出
每组测试数据单独输出有一行:分数序列的和(精确到小数点后4位)。
样例输出
3.5000
while True:
group = int(input())
for i in range(group):
num = int(input())
m,n,sum = 2,1,0
for t in range(num):
sum += m/n
n,m = m,n+m
print('%.4f'%sum)
题目描述
度度熊收到了一个只有小写字母的字符串S,他对S的子串产生了兴趣,S的子串为S中任意连续的一段。他发现,一些子串只由一种字母构成,他想知道在S中一共有多少种这样的子串。
例如在串”aaabbaa”中,度度熊想找的子串有”a”,”aa”,”aaa”,”b”,”bb”五种。
(本题只考虑子串的种数,相同的子串在多个位置出现只算一次)
输入
输入只有一行,一个字符串,长度不超过100000,只由小写字母组成
样例输入
aaabbaa
输出
输出一行,符合要求的子串种数
样例输出
5
string = input()
str = ''
str1 = ''
res = set()
for i in range(len(string)):
if string[i] == str1:
str += string[i]
else:
str = string[i]
str1 = string[i]
res.add(str)
print(len(res))
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
dumy = p = ListNode(None)
s = 0
while l1 or l2 or s:
s += (l1.val if l1 else 0) + (l2.val if l2 else 0)
p.next = ListNode(s%10)
p = p.next
s = s // 10
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dumy.next
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
occ = set()
n = len(s)
rk, ans = -1, 0
for i in range(n):
if i != 0:
occ.remove(s[i - 1])
while rk+1 < n and s[rk+1] not in occ:
occ.add(s[rk+1])
rk += 1
ans = max(ans,rk+1-i)
return ans
给定两个大小为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数。
进阶:你能设计一个时间复杂度为 O(log (m+n)) 的算法解决此问题吗?
示例 1:
输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
class Solution:
def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
nums1.extend(nums2)
nums1.sort()
l = len(nums1)
if l % 2 == 0:
return (nums1[l//2-1] + nums1[l//2])/2
else:
return nums1[(l+1)//2-1]
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
class Solution:
def longestPalindrome(self, s: str) -> str:
size = len(s)
if size < 2:
return s
max_len = 1
res = s[0]
for i in range(size):
js, js_len = self._center(s,size,i,i)
os, os_len = self._center(s,size,i,i+1)
max_hw = js if js_len > os_len else os
if len(max_hw) > max_len:
max_len = len(max_hw)
res = max_hw
return res
def _center(self,s,size,left,right):
while left >= 0 and right < size and s[left] == s[right]:
left -= 1
right += 1
return s[left+1:right],right-left-1
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I R
E T O E S I I G
E D H N
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例 2:
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
L D R
E O E I I
E C I H N
T S G
class Solution:
def convert(self, s: str, numRows: int) -> str:
if numRows < 2: return s
res = ["" for _ in range(numRows)]
i, flag = 0, -1
for c in s:
res[i] += c
if i == 0 or i == numRows - 1: flag = -flag
i += flag
return "".join(res)
One comment
You explained that effectively!