给定一个由空格分隔的整数组成的字符串S ,任务是提取字符串存在的第K个数字。
注意:字符串中至少包含K个数字。
例子:
Input: S = “12 13 15”, K= 3
Output: 15
Explanation: The 3rd integer in the above string is 15.
Input: S = “10 20 30 40”, K = 2
Output: 20
Explanation: The 2nd integer in the above string is 20.
天真的方法:解决问题的最简单方法是遍历字符串并保留遇到的空格数。遇到K – 1个空格后,将数字打印到下一个空格作为所需答案。
下面是上述方法的实现:
C++
// C++ Program for the above approach
#include
using namespace std;
// Function to print kth integer
// in a given string
void print_kth_string(string s, int K)
{
// Size of the string
int N = s.length();
// Pointer for iteration
int i;
for (i = 0; i < N; i++) {
// If space char found
// decrement K
if (s[i] == ' ')
K--;
// If K becomes 1, the next
// string is the required one
if (K == 1)
break;
}
// Print the required number
while (i++ < N && s[i] != ' ')
cout << s[i];
}
// Driver Code
int main()
{
// Given string
string s("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_string(s, K);
}
Java
// Java program for the above approach
import java.io.*;
class GFG{
// Function to print kth integer
// in a given string
static void print_kth_string(String s, int K)
{
// Size of the string
int N = s.length();
// Pointer for iteration
int i;
for(i = 0; i < N; i++)
{
// If space char found
// decrement K
if (s.charAt(i) == ' ')
K--;
// If K becomes 1, the next
// string is the required one
if (K == 1)
break;
}
// Print the required number
while (i++ < N - 1 && s.charAt(i) != ' ')
System.out.print(s.charAt(i));
}
// Driver Code
public static void main (String[] args)
{
// Given string
String s = "10 20 30 40";
// Given K
int K = 4;
// Function call
print_kth_string(s, K);
}
}
// This code is contributed by sanjoy_62
Python3
# Python3 program for
# the above approach
# Function to prkth integer
# in a given string
def print_kth_string(s, K):
# Size of the string
N = len(s);
for i in range(0, N, 1):
# If space char found
# decrement K
if (s[i] == ' '):
K -= 1;
# If K becomes 1, the next
# string is the required one
if (K == 1):
break;
# Print required number
while (i < N):
if(s[i] != ' '):
print(s[i], end = "");
i += 1;
# Driver Code
if __name__ == '__main__':
# Given string
s = "10 20 30 40";
# Given K
K = 4;
# Function call
print_kth_string(s, K);
# This code is contributed by Rajput-Ji
C#
// C# program for the above approach
using System;
class GFG{
// Function to print kth integer
// in a given string
static void print_kth_string(string s, int K)
{
// Size of the string
int N = s.Length;
// Pointer for iteration
int i;
for(i = 0; i < N; i++)
{
// If space char found
// decrement K
if (s[i] == ' ')
K--;
// If K becomes 1, the next
// string is the required one
if (K == 1)
break;
}
// Print the required number
while (i++ < N - 1 && s[i] != ' ')
Console.Write(s[i]);
}
// Driver Code
public static void Main ()
{
// Given string
string s = "10 20 30 40";
// Given K
int K = 4;
// Function call
print_kth_string(s, K);
}
}
// This code is contributed by sanjoy_62
C++
// C++ program for the above approach
#include
using namespace std;
// Function to print Kth integer
// from a given string
void print_kth_string(string str, int K)
{
// Split input into words
// using stringstream
stringstream iss(str);
// Stores individual words
string kth;
// Extract words from stream
while (iss >> kth && K) {
K--;
// If kth position
// is reached
if (K == 0) {
cout << kth;
break;
}
}
}
// Driver Code
int main()
{
// Given string
string s("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_string(s, K);
}
Java
// Java program for
// the above approach
import java.util.*;
class GFG{
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
int K)
{
// Split input into words
// using spilt
String[] iss = str.split(" ");
K--;
System.out.print(iss[K]);
}
// Driver Code
public static void main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program for the above approach
# Function to print Kth integer
# from a given string
def print_kth_string(str1, K):
# Split input into words
# using stringstream
st = str1.split(" ")
# Stores individual words
print(st[K - 1])
# Driver Code
if __name__ == '__main__':
# Given string
s = "10 20 30 40"
# Given K
K = 4
# Function call
print_kth_string(s, K)
# This code is contributed by SURENDRA_GANGWAR
C#
// C# program for
// the above approach
using System;
class GFG{
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
int K)
{
// Split input into words
// using spilt
String[] iss = str.Split(' ');
K--;
Console.Write(iss[K]);
}
// Driver Code
public static void Main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
C++
// C++ program of the above approach
#include
#include
using namespace std;
// Function to extract integer at key
// position in the given string
void print_kth_string(string str, int K)
{
// strtok(): Extracts the number at key
// c_str(): Type cast string to char*
char* s = strtok((char*)str.c_str(),
" ");
while (K > 1) {
// Get the token at position -> key
s = strtok(NULL, " ");
K--;
}
// Print the kth integer
cout << string(s) << " ";
}
// Driver Code
int main()
{
// Given string
string s("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_string(s, K);
return 0;
}
Java
// Java program of the
// above approach
import java.util.*;
class GFG{
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
int K)
{
// StringTokenizer(): Extracts
// the number at key
// c_str(): Type cast
// String to char*
StringTokenizer st =
new StringTokenizer(str);
int count = 1;
while (st.hasMoreTokens() && K > 0 )
{
if(count == K)
System.out.println(st.nextToken());
count++;
st.nextToken();
}
}
// Driver Code
public static void main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by 29AjayKumar
C#
// C# program of the
// above approach
using System;
class GFG{
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
int K)
{
// StringTokenizer(): Extracts
// the number at key
// c_str(): Type cast
// String to char*
String[] iss = str.Split(' ');
K--;
Console.Write(iss[K]);
}
// Driver Code
public static void Main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
输出:
40
时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)
Stringstream方法:想法是在C++中使用stringstream,它将字符串对象与流相关联,并允许我们从字符串进行读取,就好像它是一个流(如cin)一样。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to print Kth integer
// from a given string
void print_kth_string(string str, int K)
{
// Split input into words
// using stringstream
stringstream iss(str);
// Stores individual words
string kth;
// Extract words from stream
while (iss >> kth && K) {
K--;
// If kth position
// is reached
if (K == 0) {
cout << kth;
break;
}
}
}
// Driver Code
int main()
{
// Given string
string s("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_string(s, K);
}
Java
// Java program for
// the above approach
import java.util.*;
class GFG{
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
int K)
{
// Split input into words
// using spilt
String[] iss = str.split(" ");
K--;
System.out.print(iss[K]);
}
// Driver Code
public static void main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 program for the above approach
# Function to print Kth integer
# from a given string
def print_kth_string(str1, K):
# Split input into words
# using stringstream
st = str1.split(" ")
# Stores individual words
print(st[K - 1])
# Driver Code
if __name__ == '__main__':
# Given string
s = "10 20 30 40"
# Given K
K = 4
# Function call
print_kth_string(s, K)
# This code is contributed by SURENDRA_GANGWAR
C#
// C# program for
// the above approach
using System;
class GFG{
// Function to print Kth integer
// from a given String
static void print_kth_String(String str,
int K)
{
// Split input into words
// using spilt
String[] iss = str.Split(' ');
K--;
Console.Write(iss[K]);
}
// Driver Code
public static void Main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 4;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
输出
40
时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)
基于内置字符串函数的方法:想法是使用strtok()函数在键处提取字符串。使用c_str()函数来获取字符数组的字符指针参考。
下面是上述方法的实现:
C++
// C++ program of the above approach
#include
#include
using namespace std;
// Function to extract integer at key
// position in the given string
void print_kth_string(string str, int K)
{
// strtok(): Extracts the number at key
// c_str(): Type cast string to char*
char* s = strtok((char*)str.c_str(),
" ");
while (K > 1) {
// Get the token at position -> key
s = strtok(NULL, " ");
K--;
}
// Print the kth integer
cout << string(s) << " ";
}
// Driver Code
int main()
{
// Given string
string s("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_string(s, K);
return 0;
}
Java
// Java program of the
// above approach
import java.util.*;
class GFG{
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
int K)
{
// StringTokenizer(): Extracts
// the number at key
// c_str(): Type cast
// String to char*
StringTokenizer st =
new StringTokenizer(str);
int count = 1;
while (st.hasMoreTokens() && K > 0 )
{
if(count == K)
System.out.println(st.nextToken());
count++;
st.nextToken();
}
}
// Driver Code
public static void main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by 29AjayKumar
C#
// C# program of the
// above approach
using System;
class GFG{
// Function to extract integer
// at key position in the given String
static void print_kth_String(String str,
int K)
{
// StringTokenizer(): Extracts
// the number at key
// c_str(): Type cast
// String to char*
String[] iss = str.Split(' ');
K--;
Console.Write(iss[K]);
}
// Driver Code
public static void Main(String[] args)
{
// Given String
String s = ("10 20 30 40");
// Given K
int K = 2;
// Function call
print_kth_String(s, K);
}
}
// This code is contributed by Rajput-Ji
输出
20
时间复杂度: O(N),其中N是字符串的长度。
辅助空间: O(1)