给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
输入: s = ""
输出: 0
c++
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>occ;
int rk=-1,res=0;
for(int i=0;i<s.size();i++)
{
if(i!=0)
occ.erase(s[i-1]);
while(rk+1<s.size()&&!occ.count(s[rk+1]))
{
occ.insert(s[rk+1]);
rk++;
}
res=max(res,rk-i+1);
}
return res;
}
};
java
class Solution {
public int lengthOfLongestSubstring(String s) {
Set<Character>occ=new HashSet<Character>();
int rk=-1,res=0;
for(int i=0;i<s.length();i++)
{
if(i!=0)
occ.remove(s.charAt(i-1));
while(rk+1<s.length()&&!occ.contains(s.charAt(rk+1)))
{
occ.add(s.charAt(rk+1));
rk++;
}
res=Math.max(res,rk-i+1);
}
return res;
}
}
给你一个字符串 s,找到 s 中最长的回文子串。
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
输入:s = "cbbd"
输出:"bb"
输入:s = "a"
输出:"a"
输入:s = "ac"
输出:"a"
c++
class Solution {
public:
int len=0;
int idx=-1;
void up_data(int l,int r)
{
if(len<r-l+1)
{
len=r-l+1;
idx=l;
}
}
string longestPalindrome(string s) {
for(int i=0;i<s.size();i++)
{
int l,r;
for(int l=i,r=i;l>=0&&r<s.size();l--,r++)
{
if(s[l]==s[r])up_data(l,r);
else break;
}
for(int l=i,r=i+1;l>=0&&r<s.size();l--,r++)
{
if(s[l]==s[r])up_data(l,r);
else break;
}
}
return s.substr(idx,len);
}
};
java
class Solution {
public String longestPalindrome(String s) {
if(s==null)return "";
for(int i=0;i<s.length();i++)
{
for(int l=i,r=i;l>=0&&r<s.length();l--,r++)
{
if(s.charAt(l)==s.charAt(r))up_data(l,r);
else break;
}
for(int l=i,r=i+1;l>=0&&r<s.length();l--,r++)
{
if(s.charAt(l)==s.charAt(r))up_data(l,r);
else break;
}
}
return s.substring(idxl,idxr+1);
}
int idxl=-1,idxr=-1;
int len=0;
void up_data(int l,int r)
{
if(len<r-l+1)
{
len=r-l+1;
idxl=l;
idxr=r;
}
}
}
将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。
请你实现这个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
输入:s = "A", numRows = 1
输出:"A"
c++
class Solution {
public:
string convert(string s, int numRows) {
string res="";
if(numRows==1)return s;
for(int i=0;i<numRows;i++)
{
if(i==0||i==numRows-1)
{
for(int j=i;j<s.size();j+=(numRows-1)*2)
res+=s[j];
}
else
{
for(int j=i,k=(numRows-1)*2-i;j<s.size()||k<s.size();j+=(numRows-1)*2,k+=(numRows-1)*2)
{
if(j<s.size())res+=s[j];
if(k<s.size())res+=s[k];
}
}
}
return res;
}
};
java
class Solution {
public String convert(String s, int numRows) {
String res="";
if(numRows==1)return s;
for(int i=0;i<numRows;i++)
{
if(i==0||i==numRows-1)
{
for(int j=i;j<s.length();j+=(numRows-1)*2)
res+=s.charAt(j);
}
else
{
for(int j=i,k=(numRows-1)*2-i;j<s.length()||k<s.length();j+=(numRows-1)*2,k+=(numRows-1)*2)
{
if(j<s.length())res+=s.charAt(j);
if(k<s.length())res+=s.charAt(k);
}
}
}
return res;
}
}
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。
输入:x = 123
输出:321
输入:x = -123
输出:-321
输入:x = 120
输出:21
输入:x = 0
输出:0
c++
class Solution {
public:
int reverse(int x) {
long long int res=0;
while(x)
{
res=res*10+x%10;
x/=10;
}
if(res>INT_MAX||res<-INT_MAX)return 0;
else return (int)res;
}
};
java
class Solution {
public int reverse(int x) {
long res=0L;
while(x!=0)
{
res=res*10+x%10;
x/=10;
}
if(res>Integer.MAX_VALUE||res<-Integer.MAX_VALUE)return 0;
else return (int)res;
}
}